#include <iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;

bool vis[11]={0};
int sum=0;
vector<int> path;
int n,m;
set<vector<int>> vv;
void dfs()
{
    
    if(sum>m) return ;
    else if(sum==m)
    {
        vector<int> tmp=path;//BUG--直接将路径排序了，返回上层恢复现场全乱套了
        
        sort(tmp.begin(),tmp.end());
        vv.insert(tmp);
        return ;
    }

    for(int i=1;i<=n;i++)
    {
        //cout<<"vis[1]"<<vis[1]<<endl;
        if(!vis[i])
        {
            vis[i]=1;
            sum+=i;
            path.push_back(i);
            dfs();
            sum-=i;
            path.pop_back();
            vis[i]=0;

        }


    }
}
int main() {


    cin>>n>>m;
    dfs();
    for(auto& e:vv)
    {
            for(auto t:e)
            {
                cout<<t<<" ";
            }
            cout<<endl;
    }
    

    return 0;
}
// 64 位输出请